Distributed computing architectures enable large computational and data storage and retrieval operations to be performed by a number of different computers, thus reducing the time required to perform these operations. Distributed computing architectures are used for applications where the operations to be performed are complex, or where a large number of users are performing a large number of transactions using shared resources. A distributed shared storage system is a kind of distributed computing architecture.
If a distributed shared storage system is used to provide high bandwidth real-time media data that is shared by a large number of users, several complexities arise. In such an application, the high bandwidth real-time media data is distributed among multiple storage devices or servers. Multiple client applications or machines may access the data. To access the data, clients and servers communicate among themselves using short control messages that contain queries and responses, and using longer data messages that contain media data.
As an example, blocks of data may be read by a client by having the client first transmit a read request message to a server. The server may send an acknowledgment confirming the availability of the requested data. After receiving an acknowledgment, a client may send a read message to the server and receive data packets. A client also may write data to a server. It may send a write request message to a server and receive an acknowledgement confirming the availability of the server to store the data. The client then may send a write message to the server with the data to be written. On both the server and the client, a network interface generally maintains a queue of requests from applications to transmit various messages, called the transmit queue. The transmit requests in the transmit queue generally are placed in the transmit queue in the order that an application or applications submit messages for transmission.
The User Datagram Protocol (UDP) is commonly used for transmission over Ethernet for real-time data because it requires significantly less overhead, and thus better utilization of network bandwidth, than TCP/IP. However, UDP commonly uses a single transmit queue. Transmit requests are added at the end of this transmit queue.